#include <stdio.h>

/* 单精度浮点数存储结构：符号位（1位，f）+指数位（8位，E）+尾数位（23位，t）
 * 算数结果：f*(1.t)*2^(E-127)，e为8位的无符号数，比如，
 * -18.95
 *
 *
 * */

int main() {
    float f = -18.95f;
    double d = (double)f;
    // 获取float类型的十六进制表示
    int *a = (int*)&f; // 先获取f的指针，再以int类型解释，这样就不会改变位存储，如果直接float强制转换位int，位存储会有改变
    printf("%x\n", *a); // c197999a
    printf("%x\n", f); // 40000000 float先转为double
    printf("%d\n", f); // 1073741824
    printf("%x\n", (double)f); // 40000000
    printf("%d\n", (double)f); // 1073741824
    printf("sizeof float: %d\n", sizeof(float)); // 4
    printf("sizeof float: %d\n", sizeof(double)); // 8
    printf("%x\n", (int)f); // ffffffee
    printf("%d\n", (int)f); // -18
    // float数据会被转换成double型入栈，占用8个字节，%x会只读取4个字节
    printf("%x\n", d); // 40000000
    printf("%d\n", d); // 1073741824 

    return 0;
}
